package com.ctshk.rpc.bus.service;

import java.time.LocalDateTime;
import java.util.List;

import com.ctshk.common.dto.Result;
import com.ctshk.common.model.PageResponse;
import com.ctshk.common.model.TokenUser;
import com.ctshk.common.req.MainData;
import com.ctshk.rpc.bus.dto.BusLineDTO;
import com.ctshk.rpc.bus.dto.BusLineListDTO;
import com.ctshk.rpc.bus.dto.es.BusLineCacheDTO;
import com.ctshk.rpc.bus.req.BusArriveCityListByLineQueryReq;
import com.ctshk.rpc.bus.req.BusDepartureCityListByLineQueryReq;
import com.ctshk.rpc.bus.req.BusLinePageReq;
import com.ctshk.rpc.bus.req.BusLineQueryReq;
import com.ctshk.rpc.bus.req.BusLineReq;
import com.ctshk.rpc.bus.req.BusStopsListByLineQueryReq;

/**
 * <p>
 * 巴士线路管理 服务类
 * </p>
 *
 * @author 彭柳霖
 * @since 2021-02-08
 */
public interface IBusLineService{

    /**
     * 根据巴士信息查询巴士路线
     * @param busLineQueryReq
     * @return
     */
    List<BusLineDTO> queryBusLine(BusLineQueryReq busLineQueryReq);


    /**
     * 根据线路id查询巴士路线
     * @param lineId
     * @return
     */
    BusLineDTO queryByLineId(Long lineId);

    /**
     * 中港通巴士路线信息导入
     */
    Result importHktBusLine(TokenUser user);


    /**
     * 巴士线路列表
     * @param busLineListReq
     * @return
     */
    PageResponse<BusLineListDTO> queyList(BusLinePageReq busLineListReq);


    /**
     * 新增巴士线路信息
     * @param busLineReq
     * @param user
     */
    Result saveBusLine(BusLineReq busLineReq, TokenUser user);


    /**
     * 修改巴士线路信息
     * @param busLineReq
     * @param user
     */
    Result updateBusLine(BusLineReq busLineReq, TokenUser user);


    /**
     * 查询巴士线路详情信息
     * @param id
     * @return
     */
    BusLineDTO queryDetail(Long id);


    /**
     * 巴士线路有效无效设置
     * @param id
     */
    Result isValid(long id,TokenUser user);
    
    /**
     * 查询巴士线路的出发城市列表
     * @param req
     * @return
     */
    Result<List<MainData>> queryDepartureCityListByLine(BusDepartureCityListByLineQueryReq req);
    
    /**
     * 查询巴士线路的到达城市列表
     * @param req
     * @return
     */
    Result<List<MainData>> queryArriveCityListByLine(BusArriveCityListByLineQueryReq req);
    
    /**
     * 查询巴士线路的站点列表
     * @param req
     * @return
     */
    Result<List<MainData>> queryStopsListByLine(BusStopsListByLineQueryReq req);

    /**
     * 查询巴士路线列表
     * @return
     */
    List<BusLineCacheDTO> findBusLineList(List<Long> ids,LocalDateTime now);
}
